/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package econutri.persistencia.dao;

import econutri.persistencia.entidades.Paciente;
import econutri.persistencia.TransactionDAO;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Leonardo Oliveira Moreira
 */
public class PacienteDAO {

    public List<Paciente> getPacientes() {
        List<Paciente> result = new ArrayList<Paciente>();
        TransactionDAO dao = new TransactionDAO();
        String sql = "select " +
                "codigo, nome, nascimento, sexo, pesoatual, pesousual, altura from paciente";
        ResultSet rs = dao.executeQuery(sql);
        try {
            while (rs != null && rs.next()) {
                Paciente paciente = new Paciente();
                paciente.setCodigo(rs.getLong("codigo"));
                paciente.setNome(rs.getString("nome"));
                paciente.setNascimento(rs.getDate("nascimento"));
                paciente.setSexo(rs.getString("sexo"));
                paciente.setPesoAtual(rs.getDouble("pesoatual"));
                paciente.setPesoUsual(rs.getDouble("pesousual"));
                paciente.setAltura(rs.getDouble("altura"));
                result.add(paciente);
            }
        } catch (SQLException ex) {
            Logger.getLogger(PacienteDAO.class.getName()).log(Level.SEVERE, null, ex);
            dao.rollback();
        }
        dao.commit();
        dao.close();
        return result;
    }

    public List<Paciente> getPacientes(Long codigo, String nome, String sexo) {
        List<Paciente> result = new ArrayList<Paciente>();
        TransactionDAO dao = new TransactionDAO();
        String sql = "select " +
                "codigo, nome, nascimento, sexo, pesoatual, pesousual, altura from paciente " +
                "where (-1 = " + codigo + " or codigo = " + codigo + ") and " +
                "nome like '" + nome + "' and " +
                "sexo like '" + sexo + "'";
        ResultSet rs = dao.executeQuery(sql);
        try {
            while (rs != null && rs.next()) {
                Paciente paciente = new Paciente();
                paciente.setCodigo(rs.getLong("codigo"));
                paciente.setNome(rs.getString("nome"));
                paciente.setNascimento(rs.getDate("nascimento"));
                paciente.setSexo(rs.getString("sexo"));
                paciente.setPesoAtual(rs.getDouble("pesoatual"));
                paciente.setPesoUsual(rs.getDouble("pesousual"));
                paciente.setAltura(rs.getDouble("altura"));
                result.add(paciente);
            }
        } catch (SQLException ex) {
            Logger.getLogger(PacienteDAO.class.getName()).log(Level.SEVERE, null, ex);
            dao.rollback();
        }
        dao.commit();
        dao.close();
        return result;
    }

    public Paciente getPaciente(Long codigo) {
        if (codigo == null) {
            return null;
        }
        Paciente paciente = new Paciente();
        TransactionDAO dao = new TransactionDAO();
        String sql = "select " +
                "codigo, nome, nascimento, sexo, pesoatual, pesousual, altura from paciente where codigo = " + codigo;
        ResultSet rs = dao.executeQuery(sql);
        try {
            while (rs != null && rs.next()) {
                paciente.setCodigo(rs.getLong("codigo"));
                paciente.setNome(rs.getString("nome"));
                paciente.setNascimento(rs.getDate("nascimento"));
                paciente.setSexo(rs.getString("sexo"));
                paciente.setPesoAtual(rs.getDouble("pesoatual"));
                paciente.setPesoUsual(rs.getDouble("pesousual"));
                paciente.setAltura(rs.getDouble("altura"));
            }
        } catch (SQLException ex) {
            Logger.getLogger(PacienteDAO.class.getName()).log(Level.SEVERE, null, ex);
            dao.rollback();
        }
        dao.commit();
        dao.close();
        return paciente;
    }

    public boolean inserir(Paciente paciente) {
        if (paciente == null) {
            return false;
        }
        boolean result = false;
        String sql = "insert into paciente (nome, nascimento, sexo, pesoatual, pesousual, altura) values ('" +
                paciente.getNome() + "', '" + paciente.getNascimento() + "', '" + paciente.getSexo() + "', " + 
                paciente.getPesoAtual() + ", " + paciente.getPesoUsual() + ", " + paciente.getAltura() + ")";
        TransactionDAO dao = new TransactionDAO();
        result = dao.insert(sql);
        if (result)
            dao.commit();
        else
            dao.rollback();
        dao.close();
        return result;
    }

    public boolean atualizar(Paciente paciente) {
        if (paciente == null) {
            return false;
        }
        int sqlUpdate = 0;
        boolean result = false;
        String sql = "update paciente set " +
                "nome = '" + paciente.getNome() + "', " +
                "nascimento = '" + paciente.getNascimento() + "', " +
                "sexo = '" + paciente.getSexo() +  "', " +
                "pesoatual = " + paciente.getPesoAtual() +  ", " +
                "pesousual = " + paciente.getPesoUsual() +  ", " +
                "altura = " + paciente.getAltura() +  " " +
                "where codigo = " + paciente.getCodigo();
        TransactionDAO dao = new TransactionDAO();
        sqlUpdate = dao.update(sql);
        result = (sqlUpdate > 0);
        if (result) {
            dao.commit();
        }
        else
            dao.rollback();
        dao.close();
        return result;
    }


}
